package Generic;

import java.util.ArrayList;

/**
 * @author 王艺锡
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class Generic01 {
    public static void main(String[] args) {
        Person<Integer> p1 = new Person<Integer>(12);
        Person<String> p2 = new Person<String>("jack");

        //1.在给泛型指定类型的时候，只能填入引用类型，不能填入基本数据类型
        //ArrayList<int> ints = new ArrayList<int>();//err


        //2.在给泛型指定具体类型后，可以传入该类型或者其子类类型
        Person<A> p3 = new Person<A>(new A());
        Person<A> p4 = new Person<A>(new B());


        //3.如果不指定泛型，则默认为Object
        ArrayList arrayList = new ArrayList();//相当于ArrayList<Object> arrayList = new ArrayList<>();


    }
}
//泛型的作用是:可以再类声明时通过一个标识表示类中某个属性的类型
//或者是某个方法的返回值的类型，或者是参数类型

class Person<E>{
    E name;//E表示的是name的数据类型，该数据类型在Person对象的时候指定，即在编译期间，就确定E是什么类型

    public Person(E name) {//E也可以是参数类型
        this.name = name;
    }

    public E f(){//E也可以作为返回值
        return name;
    }
}
class A{}
class B extends A{}